home *** CD-ROM | disk | FTP | other *** search
/ APC & TCP 4 / APC & TCP 4.iso / games / publicdomain / a / attacks / sources / input.mod < prev    next >
Text File  |  1994-05-14  |  24KB  |  622 lines

  1. IMPLEMENTATION MODULE input;
  2.  
  3. (*$R-*) (* range checking OFF *)
  4.  
  5.  
  6. (*   This module deals with all the input of the program, Ataxx.  It must *)
  7. (* be linked with the graphics module, because the IDCMP events are       *)
  8. (* linked to the window.  Therefore, some of the structures that should   *)
  9. (* be hidden in the ataxxgraphics module are visible so that this module  *)
  10. (* can use them.  The only procedure visible here is GetEvent.            *)
  11.  
  12.  
  13. FROM header
  14.   IMPORT   playertype, movetype, boardrange, boardtype, state,
  15.            squaretype,          (* Strangely, it's necessary to compile!  *)
  16.            gameover, pointercode, difficulty, whoisred, whoisblue,
  17.            thinkertype;
  18. FROM attacksgraphics
  19.   IMPORT   mywindowptr,         (* Necessary for getting IDCMP events  *)
  20.            HighlightSquare, UnHighlightSquare, ChangePointer,
  21.            DrawBoard, DrawSquare, PrintTurn;
  22. FROM mdgenerallib
  23.   IMPORT MyPause;
  24. FROM Ports
  25.   IMPORT   GetMsg, ReplyMsg, MsgPortPtr, WaitPort, MessagePtr;
  26. FROM Tasks
  27.   IMPORT SignalSet, Wait;
  28. FROM SYSTEM
  29.   IMPORT ADDRESS, LONGWORD;
  30. FROM Intuition
  31.   IMPORT   IntuiMessagePtr, SelectDown, SelectUp, SetMenuStrip,
  32.            ClearMenuStrip, IDCMPFlagsSet, IDCMPFlags, MENUNUM, ITEMNUM,
  33.            MenuItemMutualExcludeSet;
  34. FROM MenuUtil
  35.   IMPORT   MENUBARPTR, InitMenuBar, ArrangeMenus, AddMenu, AddItem,
  36.            DisposeMenuBar;
  37.  
  38. VAR
  39.   mymsgportptr : MsgPortPtr;       (* Points to my message port     *)
  40.   mousex, mousey : INTEGER;        (* The coordinates of last IDCMP event *)
  41.  
  42.   mymenuptr : MENUBARPTR;          (* For Chris' menu routines *)
  43.  
  44.   editpointerstate : squaretype;   (* This tells what the state of the *)
  45.                                    (*  pointer is during editing.      *)
  46.  
  47. (**************************************************************************)
  48. PROCEDURE InitMenus;
  49.  
  50. (*   This initializes the menus for the program.  Simple.                 *)
  51. (*                                                                        *)
  52. (*   INPUT                                                                *)
  53. (*            n/a                                                         *)
  54. (*                                                                        *)
  55. (*   OUTPUT                                                               *)
  56. (*            The menus for the program now should work.                  *)
  57. (*                                                                        *)
  58.  
  59. BEGIN
  60.   InitMenuBar(mymenuptr);
  61.  
  62.   AddMenu(mymenuptr, "Project");        (* First menu *)
  63.   AddItem(mymenuptr, "New Game    ", "N", MenuItemMutualExcludeSet{}, FALSE);
  64.   AddItem(mymenuptr, "Edit Board    ", "E", MenuItemMutualExcludeSet{}, FALSE);
  65.   AddItem(mymenuptr, "About", 0C, MenuItemMutualExcludeSet{}, FALSE);
  66.   AddItem(mymenuptr, "Quit    ", "Q", MenuItemMutualExcludeSet{}, FALSE);
  67.  
  68.   AddMenu(mymenuptr, "Commands");
  69.   AddItem(mymenuptr, "Backup a move    ", "B", MenuItemMutualExcludeSet{}, FALSE);
  70.   AddItem(mymenuptr, "Redo a move    ", "R", MenuItemMutualExcludeSet{}, FALSE);
  71.   AddItem(mymenuptr, "Force Computer to move    ", "F", MenuItemMutualExcludeSet{}, FALSE);
  72.  
  73.   AddMenu(mymenuptr, "Options");         (* Second menu *)
  74.   AddItem(mymenuptr, "  Red is Human", 0C, MenuItemMutualExcludeSet{1}, whoisred = human);
  75.   AddItem(mymenuptr, "  Red is Computer", 0C, MenuItemMutualExcludeSet{0}, whoisred = computer);
  76.   AddItem(mymenuptr, "  Blue is Human", 0C, MenuItemMutualExcludeSet{3}, whoisblue = human);
  77.   AddItem(mymenuptr, "  Blue is Computer", 0C, MenuItemMutualExcludeSet{2}, whoisblue = computer);
  78.   AddItem(mymenuptr, "", 0C, MenuItemMutualExcludeSet{}, FALSE);
  79.   AddItem(mymenuptr, "  Tries to Lose", 0C, MenuItemMutualExcludeSet{6,7,8,9}, difficulty = 0);
  80.   AddItem(mymenuptr, "  Easy", 0C, MenuItemMutualExcludeSet{5,7,8,9}, difficulty = 1);
  81.   AddItem(mymenuptr, "  Kinda' Good", 0C, MenuItemMutualExcludeSet{5,6,8,9}, difficulty = 2);
  82.   AddItem(mymenuptr, "  Good", 0C, MenuItemMutualExcludeSet{4,5,7,9}, difficulty = 3);
  83.   AddItem(mymenuptr, "  Very Good", 0C, MenuItemMutualExcludeSet{5,6,7,8}, difficulty = 4);
  84.  
  85.   ArrangeMenus(mymenuptr);
  86.   SetMenuStrip( mywindowptr^, mymenuptr^.FirstMenuPtr^ );
  87. END InitMenus;
  88.  
  89.  
  90. (**************************************************************************)
  91. PROCEDURE CloseMenus;
  92.  
  93. (*   This closes and deallocates the memory for the menus.                *)
  94. (*                                                                        *)
  95. (*   INPUT                                                                *)
  96. (*            n/a                                                         *)
  97. (*                                                                        *)
  98. (*   OUTPUT                                                               *)
  99. (*            Kills the menus.                                            *)
  100. (*                                                                        *)
  101.  
  102. BEGIN
  103.   ClearMenuStrip( mywindowptr^ );
  104.   DisposeMenuBar( mymenuptr );
  105. END CloseMenus;
  106.  
  107.  
  108. (**************************************************************************)
  109. PROCEDURE ChangeToEditMenu;
  110.  
  111. (*   Clears the current menu and makes the Edit menu.                     *)
  112. (*                                                                        *)
  113. (*   INPUT                                                                *)
  114. (*            n/a                                                         *)
  115. (*                                                                        *)
  116. (*   OUTPUT                                                               *)
  117. (*            Remakes the menu bar.                                       *)
  118.  
  119. BEGIN
  120.   CloseMenus;
  121.   InitMenuBar(mymenuptr);
  122.  
  123.   AddMenu(mymenuptr, "Project");
  124.   AddItem(mymenuptr, "Exit Edit Mode", 0C, MenuItemMutualExcludeSet{}, FALSE);
  125.  
  126.   AddMenu(mymenuptr, "Player");
  127.   IF state.turn = red THEN
  128.      AddItem(mymenuptr, "  Red to move", 0C, MenuItemMutualExcludeSet {1}, TRUE);
  129.      AddItem(mymenuptr, "  Blue to move", 0C, MenuItemMutualExcludeSet {0}, FALSE);
  130.      ELSE
  131.      AddItem(mymenuptr, "  Red to move", 0C, MenuItemMutualExcludeSet {1}, FALSE);
  132.      AddItem(mymenuptr, "  Blue to move", 0C, MenuItemMutualExcludeSet {0}, TRUE);
  133.      END;
  134.  
  135.   AddMenu(mymenuptr, "Build");
  136.   AddItem(mymenuptr, "  Empty Space", 0C,
  137.           MenuItemMutualExcludeSet{1,2,3}, editpointerstate = empty);
  138.   AddItem(mymenuptr, "  Block Space", 0C,
  139.           MenuItemMutualExcludeSet{0,2,3}, editpointerstate = block);
  140.   AddItem(mymenuptr, "  Red Player", 0C,
  141.           MenuItemMutualExcludeSet{0,1,3}, editpointerstate = red);
  142.   AddItem(mymenuptr, "  Blue Player", 0C,
  143.           MenuItemMutualExcludeSet{0,1,2}, editpointerstate = blue);
  144.  
  145.   AddMenu(mymenuptr, "Major");
  146.   AddItem(mymenuptr, "Cancel All", 0C, MenuItemMutualExcludeSet{}, FALSE);
  147.   AddItem(mymenuptr, "All Empty", 0C, MenuItemMutualExcludeSet{}, FALSE);
  148.   AddItem(mymenuptr, "All Blocks", 0C, MenuItemMutualExcludeSet{}, FALSE);
  149.  
  150.   ArrangeMenus(mymenuptr);
  151.   SetMenuStrip( mywindowptr^, mymenuptr^.FirstMenuPtr^ );
  152. END ChangeToEditMenu;
  153.  
  154.  
  155. (**************************************************************************)
  156. PROCEDURE ChangeToComputerMenu;
  157.  
  158. (*   Clears the current menu and makes the menu to be displayed during    *)
  159. (* the time the computer is moving.                                       *)
  160. (*                                                                        *)
  161. (*   INPUT                                                                *)
  162. (*            n/a                                                         *)
  163. (*                                                                        *)
  164. (*   OUTPUT                                                               *)
  165. (*            Remakes the menu bar.                                       *)
  166. BEGIN
  167.   CloseMenus;
  168.   InitMenuBar(mymenuptr);
  169.  
  170.   AddMenu(mymenuptr, "Stop!");
  171.   AddItem(mymenuptr, "Abort Computer's Move    ", "A", MenuItemMutualExcludeSet{}, FALSE);
  172.  
  173.   ArrangeMenus(mymenuptr);
  174.   SetMenuStrip( mywindowptr^, mymenuptr^.FirstMenuPtr^ );
  175. END ChangeToComputerMenu;
  176.  
  177. (**************************************************************************)
  178. PROCEDURE ChangeToMainMenu;
  179.